/**
 * 
 */
package br.com.formulavendas.businessusercase;

import java.util.List;

import org.hibernate.Query;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import br.com.formulavendas.domainmodel.Produto;


/**
 * @author Fernando
 * 
 */
public class ManterProduto extends BaseBusinessUserCase 
				implements br.com.formulavendas.businessusercase.baseinterface.IBasePersistence<Produto>,
				br.com.formulavendas.businessusercase.baseinterface.IBaseFind<Produto> {

	public ManterProduto() {
	}

	private static final Logger log = LoggerFactory.getLogger(ManterProduto.class);

	// Lists
	@Override
	public List<Produto> findAll() {
		log.debug("finding all Produto instances");
		try {
			String queryString = "from ProdutoEndereco";
			Query queryObject = this._session.createQuery(queryString);
			return queryObject.list();
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}

	@Override
	public Produto findById(java.lang.Integer id) {
		log.debug("getting Produto instance with id: " + id);
		try {
			Produto instance = (Produto) this._session.get("Produto", id);
			return instance;
		} catch (RuntimeException re) {
			log.error("get failed", re);
			throw re;
		}
	}

	@Override
	public List<Produto> findByProperty(String propertyName, Object value) {
		log.debug("finding Produto instance with property: " + propertyName
				+ ", value: " + value);
		try {
			String queryString = "from Produto as model where model."
					+ propertyName + "= ?";
			Query queryObject = this._session.createQuery(queryString);
			queryObject.setParameter(0, value);
			return queryObject.list();
		} catch (RuntimeException re) {
			log.error("find by property name failed", re);
			throw re;
		}
	}

	// CRUD
	@Override
	public void save(Produto transientInstance) {
		log.debug("saving Produto instance");
		try {
			this._session.save(transientInstance);
			log.debug("save successful");
		} catch (RuntimeException re) {
			log.error("save failed", re);
			throw re;
		}
	}

	@Override
	public void delete(Produto persistentInstance) {
		log.debug("deleting Produto instance");
		try {
			this._session.delete(persistentInstance);
			log.debug("delete successful");
		} catch (RuntimeException re) {
			log.error("delete failed", re);
			throw re;
		}
	}
}
